﻿using System;
using System.Collections.Generic;
using System.Text;
using AdaptiveAgents.Loggers;

namespace AdaptiveAgents.Runing_Tools
{
    /// <summary>
    /// This Class contain input data from the costumer
    /// </summary>
    class InputEntry
    {        
        private int _NumberOfRounds;
        private int _NumberOfAgents;
        private int _NumberOfGames;
        private String _GameType;
        private Boolean _isRandom;
        private String _FilePath;
        private List<string> _AgentsList;
        private String _ExperimentType;
        private string _EnvironmentType;
        private Logger _Logger;

        /// <summary>
        /// Default Ctor for InputEntry Class
        /// </summary>
        public InputEntry() { }


        /// <summary>
        /// Special "InputEntry" Ctor, Copy InputEntry from another 
        /// </summary>
        /// <param name="obj">Original Object</param>
        public InputEntry(InputEntry obj)
        {
            _AgentsList = obj.AgentsList;
            _FilePath = obj.FilePath;
            _GameType = obj.GameType;
            _isRandom = obj.isRandom;
            _NumberOfAgents = obj.Agents;
            _NumberOfGames = obj.Games;
            _NumberOfRounds = obj.Rounds;
            _ExperimentType = obj.ExperimentType;
        }


        /// <summary>
        /// Normal "InputEntry" Ctor
        /// </summary>
        /// <param name="games">Number of Games</param>
        /// <param name="rounds">Number of rounds</param>
        /// <param name="agents">Number of agents</param>
        /// <param name="gameType">Game type</param>
        /// <param name="experimentType">Experiment type</param>
        /// <param name="isRandom">FALSE - if read agents data from file</param>
        /// <param name="filePath">File path of agent data</param>
        /// <param name="list">List of agents type</param>
        /// <param name="logger">Logger</param>
        public InputEntry(int games, int rounds, int agents, String gameType, String experimentType, Boolean isRandom, String filePath, List<string> list, Logger logger)
        {
            _NumberOfGames = games;
            _NumberOfRounds = rounds;
            _NumberOfAgents = agents;
            _GameType = gameType;
            _isRandom = isRandom;
            _FilePath = filePath;
            _AgentsList = list;
            _ExperimentType = experimentType;
            _Logger = logger;           
        }


        /// <summary>
        /// Setter and Getter for Rounds
        /// </summary>
        public int Rounds
        {
            get{ return _NumberOfRounds; }
            set { _NumberOfRounds = value; }
        }


        /// <summary>
        /// Setter and Getter for Games
        /// </summary>
        public int Games 
        {
            get { return _NumberOfGames; }
            set { _NumberOfGames = value; }
        }


        /// <summary>
        /// Setter and Getter for Agents
        /// </summary>
        public int Agents
        {
            get { return _NumberOfAgents; }
            set { _NumberOfAgents = value; }
        }


        /// <summary>
        /// Setter and Getter for GameType
        /// </summary>
        public string GameType
        {
            get { return _GameType; }
            set { _GameType = value; }
        }


        /// <summary>
        /// Setter and Getter for ExperimentType
        /// </summary>
        public string ExperimentType
        {
            get { return _ExperimentType; }
            set { _ExperimentType = value; }
        }


        /// <summary>
        /// Setter and Getter for FilePath
        /// </summary>
        public string FilePath
        {
            get { return _FilePath; }
            set { _FilePath = value; }
        }


        /// <summary>
        /// Setter and Getter for Random creator
        /// </summary>
        public Boolean isRandom
        {
            get { return _isRandom; }
            set { _isRandom = value; }
        }


        /// <summary>
        /// Setter and Getter for AgentList
        /// </summary>
        public List<string> AgentsList
        {
            get { return _AgentsList; }
            set { _AgentsList = value; }
        }


        /// <summary>
        /// Setter and Getter for Logger
        /// </summary>
        public Logger Logger
        {
            get { return _Logger; }
            set { _Logger = value; }
        }

        /// <summary>
        /// Setter and Getter for EnvironmentType
        /// </summary>
        public string EnvironmentType
        {
            get { return _EnvironmentType; }
            set { _EnvironmentType = value; }
        }
    }
}
